﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ServirMovil.Clases.Movil;
using GS1.Library;
using GS1.PsionRFID;

namespace ServirMovil.Formularios
{
    public partial class frmBase : Form
    {
        #region --- Constructor ---
        public frmBase()
        {
            InitializeComponent();
        }
        #endregion

        #region --- Eventos Formulario ---
        private void frmBase_Load(object sender, EventArgs e)
        {
            agregarEventoGatillo();
        }

        private void frmBase_Closing(object sender, CancelEventArgs e)
        {
            quitarEventoGatillo();
        }
        #endregion

        #region --- Eventos LectorRFID ---
        protected virtual void OnCapturaSucesos(string mensaje)
        {
            mostrarMensajeInformacion(mensaje, "Lector-RFID");
        }

        protected virtual void OnCapturaError(string mensaje)
        {
            mostrarMensajeExclamacion(mensaje, "Lector-RFID");
        }

        protected virtual void OnCapturaData(Tag tag)
        {
        }

        protected virtual void OnInicioCapturaData()
        {
        }

        protected virtual void OnFinCapturaData(ListaTag listaTag)
        {
        }
        #endregion

        #region --- Metodos Propios ---
        public void agregarEventoGatillo()
        {
            // Capturando eventos del lectorRFID
            ParametrosAplicacion.psionRFID.CapturaData += new GS1.PsionRFID.PsionRFID.CapturaDataHandler(OnCapturaData);
            ParametrosAplicacion.psionRFID.CapturaError += new PsionRFID.CapturaErrorHandler(OnCapturaError);
            ParametrosAplicacion.psionRFID.CapturaSucesos += new PsionRFID.CapturaSucesosHandler(OnCapturaSucesos);
            ParametrosAplicacion.psionRFID.InicioCapturaData += new GS1.PsionRFID.PsionRFID.InicioCapturaDataHandler(OnInicioCapturaData);
            ParametrosAplicacion.psionRFID.FinCapturaData += new GS1.PsionRFID.PsionRFID.FinCapturaDataHandler(OnFinCapturaData);
        }

        public void quitarEventoGatillo()
        {
            // Quitando eventos del lectorRFID
            ParametrosAplicacion.psionRFID.CapturaData -= new GS1.PsionRFID.PsionRFID.CapturaDataHandler(OnCapturaData);
            ParametrosAplicacion.psionRFID.CapturaError -= new GS1.PsionRFID.PsionRFID.CapturaErrorHandler(OnCapturaError);
            ParametrosAplicacion.psionRFID.CapturaSucesos -= new PsionRFID.CapturaSucesosHandler(OnCapturaSucesos);
            ParametrosAplicacion.psionRFID.InicioCapturaData -= new GS1.PsionRFID.PsionRFID.InicioCapturaDataHandler(OnInicioCapturaData);
            ParametrosAplicacion.psionRFID.FinCapturaData -= new GS1.PsionRFID.PsionRFID.FinCapturaDataHandler(OnFinCapturaData);
        }

        public void establecerPotenciaLectura()
        {
            if (ParametrosAplicacion.psionRFID != null)
            {
                ParametrosAplicacion.psionRFID.establecerPotencia(ParametrosAplicacion.POTENCIA_LECTURA);
            }
        }

        public void establecerPotenciaGrabado()
        {
            if (ParametrosAplicacion.psionRFID != null)
            {
                ParametrosAplicacion.psionRFID.establecerPotencia(ParametrosAplicacion.POTENCIA_GRABADO);
            }
        }

        public void mostrarMensajeInformacion(string mensaje, string titulo)
        {
            quitarEventoGatillo();
            Util.ShowMessageboxInfo(mensaje, titulo);
            agregarEventoGatillo();
        }

        public void mostrarMensajeExclamacion(string mensaje, string titulo)
        {
            quitarEventoGatillo();
            Util.ShowMessageboxExclamacion(mensaje, titulo);
            agregarEventoGatillo();
        }

        public bool mostrarMensajePregunta(string mensaje, string titulo)
        {
            bool resultado = false;
            quitarEventoGatillo();
            resultado = Util.ShowMessageboxPregunta(mensaje, titulo);
            agregarEventoGatillo();

            return resultado;
        }

        public void mostrarMensajeError(Exception ex, string titulo)
        {
            quitarEventoGatillo();
            Util.MensajeError(ex, titulo);
            agregarEventoGatillo();
        }

        public void campoNecesario(Control control, string mensaje, string titulo)
        {
            quitarEventoGatillo();
            Util.CampoNecesario(control, mensaje, titulo);
            agregarEventoGatillo();
        }
        #endregion
    }
}